package day22;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//测试单线程池
public class Demo {
    public static void main(String[] args) {
        //1.创建线程池
        ExecutorService es=Executors.newSingleThreadExecutor();
        //统计开始的时间
        long start=System.currentTimeMillis();
        //2.执行线程池(可以执行多次)
        for (int j=0;j<10;j++){
            es.execute(()->{
                String name=Thread.currentThread().getName();
                System.out.println(name+"开始进洞");
                for (int i=3;i>0;i--){
                    System.out.println(name+"还需要"+i+"秒");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println(name+"开始出洞");
            });
        }
        //3.关闭线程池（可选的）
        //比如：如果10人都已经结束了，统计一下所有人进出山洞的时间
        //这种需求就需要关闭
        //比如：每隔两天完成数据库备份，这种需求就不能关闭
        es.shutdown();
        //用于判断线程池是否关闭，同时线程池的任务都结束了
        //es.isTerminated();  利用while循环，等待任务结束，如果不结束，一直循环

        while (!es.isTerminated()){}
        //统计结束的时候（需要等待线程池的任务都走完才统计）
        long end=System.currentTimeMillis();
        System.out.println("所有人进出洞的时间"+(end-start)+"ms");
    }
}
